package thread;

/**
 * 同步块
 *
 */
public class SyncDemo2 {
    public static void main(String[] args) {
//        Shop shop = new Shop();
        Shop shop1 = new Shop();
        Shop shop2 = new Shop();
        Thread t1 = new Thread("范传奇") {
            public void run() {
                shop1.buy();
//                shop.buy();
            }
        };
        Thread t2 = new Thread("王克晶") {
            public void run() {
                shop2.buy();
//                shop.buy();
            }
        };
        t1.start();
        t2.start();
    }
}
    class Shop{
        public void buy(){
            try {
                Thread t = Thread.currentThread();
                System.out.println(t.getName()+":正在挑衣服...");
                Thread.sleep(5000);

//                synchronized (this){
                //不是合适的锁对象，因为字符串字面量对象全局唯一，
                // 这会导致多个线程执行不同的shop的buy方法时（）没有并发安全问题时）
                //也要求同步执行，这会降低效率
                synchronized ("hello"){
                    //不可以，多个线程都会new对象，看到的不是同一个锁对象
//                synchronized (new Object()){
                    System.out.println(t.getName()+":正在试衣服...");
                    Thread.sleep(5000);
                }
                System.out.println(t.getName()+":结账离开");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
